iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
Software Development

跟著 OXXO 一起學 Python系列 第 29

( Day 14.2 ) Python 匯入模組 import

  • 分享至 

  • xImage
  •  

在 Python 裡,「模組」是一個存在於任意程式碼中的檔案,任何 Python 的程式碼也都可以當作模組使用,透過 import 陳述式,可以引用其他模組的程式碼,進一步使用其他模組的程式和變數,讓程式更精簡更好維護。

原文參考:匯入模組 import

本篇範例前半段 ( import、新增別名 ) 可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab ),後半段建議使用「本機 Python 環境」實作

import

import 陳述式最簡單的用法就是「import 模組名稱」,模組名稱是不包含 .py 的名稱,舉例來說,下方的程式碼匯入 datetime 模組,就能使用裡面 datetime 和 date 的方法,顯示目前的時間與日期 ( 其他頁面有更多標準函式庫的介紹 )。

import datetime
print(datetime.datetime.now())   # 2021-10-18 06:39:48.998396
print(datetime.date.today())     # 2021-10-18

此外,也可以使用「from 模組名稱 import 方法」,單純匯入模組中的某一段程式,舉例來說,下方的程式碼只匯入了 date 方法。

from datetime import date
print(date.today())     # 2021-10-18

as 替模組新增別名

如果匯入的模組名稱和原本程式碼裡使用的相同,就必須修改其中一個的名稱 ( 修改模組或自己的程式 ),這時可以將模組使用「別名」的方式匯入,就不會更動到自己的程式,使用的方法為「import 模組 as 別名」,舉例來說,下方的程式碼將匯入 datetime 模組使用「as」賦予 datetime 一個別名 dd,使用時只要呼叫 dd,就等同呼叫 datetime。

import datetime as dd
print(dd.datetime.now())   # 2021-10-18 06:39:48.998396
print(dd.date.today())     # 2021-10-18

建立自己的模組

每一支 Python 程式都可以作為模組,所以可以將共用的程式打包變成模組,再透過其他程式引用,舉例來說,下方有兩支 Python 程式,透過 main.py 匯入 ok.py,執行 ok.py 裡的 talk 函式。

  • ok.py

    def talk(msg):
      print(msg)
    
  • main.py

    import ok
    ok.talk('hi')   # hi
    

如果自己的程式裡有多個函式或變數,也可以透過「from 模組名稱 import 方法」單獨匯入,下方的程式只匯入了 count 函式和 name 變數。

  • ok.py

    def talk(msg):
        print(msg)
    
    def count(x, y):
        print(int(x)+int(y))
    
    name = 'oxxo'
    age = 18
    
  • main.py

    from ok import count
    from ok import name
    count(1,2)      # 3
    print(name)     # oxxo
    

模組的路徑

Python 匯入模組的路徑,支援「絕對路徑」和「相對路徑」兩種,主要的寫法如下:

  • 絕對路徑:以「目前檔案所在的資料夾」為根目錄

    import a
    from a import b
    

    舉例來說,將 ok.py 放在與 main.py 同層的 module 的 test 資料夾裡,匯入時就必須要加上路徑「module.test」。

    from module.test import ok
    ok.count(1,2)      # 3
    print(ok.name)     # oxxo
    
  • 相對路徑:相對於「目前檔案所在的資料夾」的路徑,使用「.」作為區隔。

    from . import a     # 同一層目錄
    from .. import a    # 上一層目錄
    from ... import a   # 上上層目錄
    from .a import b
    

    使用相對路徑比較容易發生問題,常遇見的就是「attempted relative import with no known parent package」,原因出在執行時將執行的 .py 當作最底層,因此就發生找不到父元素 ( parent package ) 的狀況,參考 stackoverflow 的解法 ( 連結 1連結 2 ),執行採用輸入指令的方式,輸入 python -m 目錄.檔名,就可以正常執行。

更多教學

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我有個超過一千篇教學的 STEAM 教育學習網,有興趣可以參考下方連結呦~ ^_^


上一篇
( Day 14.1 ) Python 內建函式 ( 檔案讀寫 open )
下一篇
( Day 15.1 ) Python 函式 function
系列文
跟著 OXXO 一起學 Python101
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言